package com.kingsystem.kingteachermarks_backend.KingUtil;

import io.jsonwebtoken.*;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;
import io.jsonwebtoken.security.SignatureException;

import javax.crypto.SecretKey;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JwtOper {
    private static final String SECRET_KEY = "KingsystemnetcnKingsystemcomKingsystemcomcnHanYueSoftHanYueSystem"; // 密钥
    // 生成安全密钥
    private final static SecretKey secretKey =
            Keys.hmacShaKeyFor(Decoders.BASE64.decode(SECRET_KEY));
    // 过期时间（单位：毫秒）
    private static final long EXPIRATION = 3600000; // 一小时

    // 生成JWT
    public static String generateToken(String username) {
        Map<String, Object> claims = new HashMap<>();
        claims.put("username", username); // 可以根据需要加入更多的自定义字段


        return Jwts.builder()
                .setClaims(claims)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION)) // 过期时间1小时
                .signWith(secretKey) // 签名
                .compact();
    }

    // 解析JWT
    public static Claims parseToken(String token) throws JwtException {
        try {
            JwtParserBuilder jwtParserBuilder = Jwts.parserBuilder().setSigningKey(secretKey);
            return jwtParserBuilder
                    .build()
                    .parseClaimsJws(token)
                    .getBody();
        } catch (JwtException e) {
            // 捕获解析异常，抛出一个自定义的异常或返回null
            throw new JwtException("Invalid token: " + e.getMessage(), e);
        }
    }

    // 检查JWT是否有效
    public static boolean isTokenExpired(String token) {
        try {
            Claims claims = parseToken(token);
            return claims.getExpiration().before(new Date());
        } catch (JwtException e) {
            // 解析失败，视为Token无效
            return true;
        }
    }

    // 获取用户名
    public static String getUsername(String token) {
        try {
            Claims claims = parseToken(token);
            return claims != null ? claims.get("username", String.class) : null;
        } catch (JwtException e) {
            // Token无效，返回null或可以选择抛出异常
            return null;
        }
    }

//    // 获取用户id
//    public static Integer getUserId(String token) {
//        try {
//            Claims claims = parseToken(token);
//            return claims != null ? claims.get("userId", Integer.class) : null;
//        } catch (JwtException e) {
//            // Token无效，返回null或可以选择抛出异常
//            return null;
//        }
//    }
}
